流程
- 建立rrd file
rrdtool create x.rrd
- 更新rrd data
rrdtool update x.rrd
- 繪圖
rrdtool graph x.gif
縮寫 / 術語
縮寫 | 全名 | 備註 |
---|---|---|
DS | Data Source | |
DST | Data Source Type | COUNTER/DERIVE/ABSOLUTE/GAUGE |
RRA | Round Robin Archives | |
PDP | Primary Data Point | update 的資料 |
CF | Consolidation Function | MIN/MAX/AVERAGE/LAST |
CDP | Consolidation Data Point | RRA 中合併數筆的 PDP 資料 |
Resolution | Resolution | 一個粒度的時間範圍 |
DEF | data definiton | |
VDEF | variable definition | |
CDEF | data calculation | blank |
資料格式
資料格式 | 說明 | 自我理解 |
---|---|---|
COUNTER | 累計值 最後以秒計算 數值為正數 |
數值為正數 跟上一筆資料取差值 再除以step秒數 |
DERIVE | 同 COUNTER 可處理負數 |
數值可為負數 跟上一筆資料取差值 再除以step秒數 |
ABSOLUTE | 數值為相對比值 第一筆資料為對比 |
數值是相對值 相對第一筆資料的比值 100:300 -> 1:3 |
GAUGE | 直接數值 , 非以秒計 | 填寫多少,就是多少 |
Values = 300, 600, 900, 1200
Step = 300 seconds
COUNTER DS = 1, 1, 1, 1 # (300 - 0) / Step, (600 - 300) / Step
DERIVE DS = 1, 1, 1, 1 # (300 - 0) / Step, (600 - 300) / Step
ABSOLUTE DS = 1, 2, 3, 4 # 第一個數字為300, 所以 300 / 300, 600 / 300
GAUGE DS = 300, 600, 900, 1200 # 300, 600, 900, 1200
Create
rrdtool create filename
[--start|-b start time]
[--step|-s step]
[--no-overwrite|-O]
[DS:ds-name:DST:dst arguments]
[RRA:CF:cf arguments]
名稱 | 指令 | 備註 |
---|---|---|
start | --start 978300900 -b 978300900 |
資料開始時間 預設現在(建議此值可為 step 除盡) |
step | --step 300 -s 300 |
資料的更新頻率 預設為 300秒 |
DS | [DS:ds-name:DST:Heartbeat:Min:Max] DS:ds0:GAUGE:1200:-10000:10000 DS:ds1:COUNTER:1200:0:U |
heartbeat 通常為 step 之倍數 資料格式為GAUGE的變數ds0,有效範圍1200秒,值介於-10000~10000 資料格式為COUNTER的變數ds1,有效範圍1200秒,值介於0~ 無限制 (U) |
RRA | [RRA:AVERAGE|MIN|MAX|LAST:xff:steps:rows] |
合併特性 (CF) 連續性 (xff) 時間特性 (steps) 筆數 (rows) |
start 978300000
heartbeat 900
update 978300300 1
update 978301200 2
update 978302100 3
978300300: 1.0000000000e+00
978300600: 2.0000000000e+00
978300900: 2.0000000000e+00
978301200: 2.0000000000e+00
978301500: 3.0000000000e+00
978301800: 3.0000000000e+00
978302100: 3.0000000000e+00
# step 預設 300s
RRA:AVERAGE:0.5:1:288 # 300 * 1 * 288 = 86400 = 1day
RRA:AVERAGE:0.5:4:504 # 300 * 4 * 504 = 604800 = 7day
RRA:AVERAGE:0.5:12:720 # 300 * 12 * 720 = 30day
Update
rrdtool update filename
--template|-t ds-name:ds-name:...
time|N:value[:value...]
at-time@value[:value...]
[ time:value[:value...] ..]
# ex :
rrdtool update test.rrd 920808300:12420:U # U UNKNOWN
rrdtool update test.rrd N:12420 # N 為現在的時間
rrdtool update demo3.rrd -- -5:21 # 五秒前
# update 要比RRA最後一筆資料還要新
# DS 有多少,update資料數也要相同
Graph
Time Range
# 開始時間 預設一天前
# 結束時間 預設現在
[-s|--start time] [-e|--end time] [-S|--step seconds]
# ex:
--start 978300000 --end 979078500
# start end step 以DEF定義的為主
DEF:value1=eth0.rrd:eth0_in:AVERAGE:start=x:end=y:step=z
DEF:value1=eth0.rrd:eth0_in:AVERAGE:end=now:start=end-1h \ # 当前1小时内
DEF:value2=eth0.rrd:eth0_in:AVERAGE:end=now-1h:start=now-2h \ # 2小时前
DEF:value3=eth0.rrd:eth0_in:AVERAGE:end=now-2h:start=now-3h \ # 3小时前
LINE1:value1#00ff00:"1 hours ago" \
LINE2:value2#ff0000:"2 hours ago" \
LINE3:value3#000000:"3 hours ago"
圖表大小 Size
[-w|--width pixels] [-h|--height pixels]
Y 軸上下限(Limits)
# -–rigid ,则严格按照 –-upper-limit 和 –-lower-limit 绘制
[-u|--upper-limit value] [-l|--lower-limit value] [-r|--rigid]
X/Y 軸刻度(Grid)
# 去掉 X/Y 轴的刻度
[-x|--x-grid none]
[-y|--y-grid none]
# GTM:GST :控制次要格网线的位置
# MTM:MST :控制主要网格线的位置
# LPR:LFM :LTM:LST 只是决定了 label 的显示位置了
# GTM/MTM 是一个时间单位,可以是 SECOND、MINUTE、HOUR、DAY 、WEEK、MONTH、YEAR
# GST/MST 则是一个数字
# 每15分钟一根次要网格线,则格式为 MINUTE:15
# LPR 指的是如何放置 label 。如果LPR 为0,则数字对齐格线
# LFM date 命令的参数。%a(星期几)、%b(月份)、%d(天)、%H(小时)、%M(分)、%Y(年)
[-x|--x-grid GTM:GST:MTM:MST:LTM:LST:LPR:LFM]
# ex:
–-x-grid MINUTE:15:HOUR:1:HOUR:1:0:’%H:%M’
# grid step :用于控制Y轴每隔多少显示一根水平线
# label factor :默认为1,也就是在每根水平线的高度那里显示一个值。
[-y|--y-grid grid step:label factor]
# –Y ,它可以最大限度的优化 Y 轴的刻度
[-Y|--alt-y-grid]
# –X 设置 Y 轴刻度值的(范围是 -18、-15、-12、-9、-6 、-3、0、3、6、9、12、15、18),預設0
# -X 3 單位1000
# -X 6 單位1000000
[-X|--units-exponent value]
其他(Miscellaneous)
# FONTTAG 图表的某個部分 DEFAULT(全部),TITLE(标题)、AXIS(坐标轴字体)、UNIT(Y轴单位字体)、LEGEND(图例字体)
# size 字体大小
# font 字型擋位置
[-n|--font FONTTAG:size:[font]]
# ex:
# 修改标题的字体为黑体
-n TITLE:10:'/home/bob/Fonts/simhei.ttf'
# 取消图表下方的图例
[-g|--no-legend]
# 默认 1k=1000
[-b|--base value]
数字报表
DEF:value1=eth0.rrd:eth0_in:AVERAGE \
DEF:value2=eth0.rrd:eth0_out:AVERAGE \
COMMENT:" \n" \
COMMENT:" 当前值--------------平均值--------------最大值--------------最小值--------------\n"
COMMENT:" \n"
AREA:value1#00FF00:"流入" \
GPRINT:value1:LAST:'%13.2lf' \
GPRINT:value1:AVERAGE:%13.2lf \
GPRINT:value1:MAX:%13.2lf \
GPRINT:value1:MIN:%13.2lf \
COMMENT:" \n" \
LINE2:value2#ff0000:"流出":STACK \ # 注意这里是 STACK 方式
GPRINT:value2:LAST:%13.2lf \
GPRINT:value2:AVERAGE:%13.2lf \
GPRINT:value2:MAX:%13.2lf \
GPRINT:value2:MIN:%13.2lf \
COMMENT:" \n" \
COMMENT:" \n" \
COMMENT:"LAST UPDATED \:$(date '+%Y-%m-%d %H\:%M')\n" -Y
特殊功能
# VRULE/HRULE 可以用于在图表上面绘制垂直线/水平线
VRULE:time#color[:legend]
HRULE:value#color[:legend]
# ex:
# 在 100k 处画一根水平线,并指出这是最大值。
HRUE:100000#ff0000:"最大值"
SHIFT:vname:offset
# ex:
DEF:value1=eth0.rrd:eth0_in:AVERAGE:end=now:start=now-1d \ # 1天前
DEF:value2=eth0.rrd:eth0_in:AVERAGE:end=now-1d:start=now-2d \ # 2天前
DEF:value3=eth0.rrd:eth0_in:AVERAGE:end=now-2d:start=now-3d \ # 3天前
LINE1:value1#00ff00:"1 day ago" \
SHIFT:value2:86400 LINE1:value2#ff0000:"2 days ago" \ # 把曲线向右移动1天
SHIFT:value3:172800 LINE1:value3#000000:"3 days ago" \ # 把曲线向右移动2天
RPN 後綴表示式
man rrdgraph_rpn
類型 | 指令 | RPN | 中綴 |
---|---|---|---|
布尔操作符 | GT、GE、LT、LE、EQ、NE | 2,1,GE | 2>=1 |
特殊值比较符 | UN、ISINF | mydata,UN | mydata == UNKNOWN |
条件操作符 | IF | mydata,UN,0,mydata,IF |
|
比较操作符 | MIN、MAX、LIMIT | mydata,20,MAX alpha,0,100,LIMIT |
MAX(mydata,20) LIMIT(alpha,0,100) |
算术操作符 | + 、-、*、/、%、SIN, COS, LOG, EXP, SQRT、FLOOR, CEIL、 ATAN、ATAN2、DEG2RAD, RAD2DEG |
1,2,- | 1-2 |
数据集操作符 | 所谓数据集(sets),就是指多个数据。 SORT、REV、AVG、TREND |
v1,v2,v3,v4,3,SORT | v1,SORT(v2,v3,v4) |
特殊值 | UNKN、INF、NEINF、PREV、COUNT | mydata,0,GT,UNKN,mydata,IF |
|
时间操作符 | NOW、TIME、LTIME | TIME NOW |
目前這筆記錄的Timestamp 現在的Timestamp |
堆栈操作符 | POP、DUP、EXC | EXC | 最頂的第1,2元素交換 |
1 | rrdtool create all2.rrd --start 978300000 \ |
Source:
- RRDtool 系列连载 -1 :简介
- rrdtool Round Robin Database Howto Version 1
- Rrdtool
- RRDtool Tips & Tricks
- RRDtool: Creating a database
- RRDtool tutorial and graph examples
- Index of tutorials
Timestamp:
date
rrdtool first eth0.rrd --rraindex 3
date -d '1970-01-01 1100822400 sec utc'